home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_CriticalAvlTreeOwned.h < prev    next >
C/C++ Source or Header  |  2000-12-29  |  12KB  |  311 lines

  1. #ifndef CB_CRITICAL_AVLTREE_OWNED_H
  2. #define CB_CRITICAL_AVLTREE_OWNED_H
  3.  
  4. #include "CB_CriticalAvlTree.h"
  5. #include "CB_AvlTreeOwned.h"
  6.  
  7. // defines for include files
  8. #define RELATION_TEMPLATE_CRITICAL_AVLTREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  9. private:\
  10.     ClassTo* _top##NameTo;\
  11.     int _count##NameTo;\
  12. \
  13. public:\
  14.     static CriticalSection& CriticalSection##NameTo()\
  15.     {\
  16.         static CriticalSection criticalSection##NameTo;\
  17.         return criticalSection##NameTo;\
  18.     }\
  19. \
  20.     void Add##NameTo(ClassTo* item)\
  21.     {\
  22.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  23.         METHOD_AVLTREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  24.     }\
  25.     void Remove##NameTo(ClassTo* item)\
  26.     {\
  27.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  28.         METHOD_AVLTREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  29.     }\
  30.     void RemoveAll##NameTo()\
  31.     {\
  32.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  33.         METHOD_AVLTREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  34.     }\
  35.     void DeleteAll##NameTo()\
  36.     {\
  37.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  38.         METHOD_AVLTREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  39.     }\
  40.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  41.     {\
  42.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  43.         METHOD_AVLTREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  44.     }\
  45.     ClassTo* GetFirst##NameTo() const\
  46.     {\
  47.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  48.         METHOD_AVLTREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  49.     }\
  50.     ClassTo* GetLast##NameTo() const\
  51.     {\
  52.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  53.         METHOD_AVLTREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  54.     }\
  55.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  56.     {\
  57.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  58.         METHOD_AVLTREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  59.     }\
  60.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  61.     {\
  62.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  63.         METHOD_AVLTREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  64.     }\
  65.     int Get##NameTo##Count() const\
  66.     {\
  67.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  68.         METHOD_AVLTREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  69.     }\
  70.     ITERATOR_TEMPLATE_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  71.  
  72. #define RELATION_TEMPLATE_NOFILTER_CRITICAL_AVLTREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  73. private:\
  74.     ClassTo* _top##NameTo;\
  75.     int _count##NameTo;\
  76. \
  77. public:\
  78.     static CriticalSection& CriticalSection##NameTo()\
  79.     {\
  80.         static CriticalSection criticalSection##NameTo;\
  81.         return criticalSection##NameTo;\
  82.     }\
  83. \
  84.     void Add##NameTo(ClassTo* item)\
  85.     {\
  86.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  87.         METHOD_AVLTREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  88.     }\
  89.     void Remove##NameTo(ClassTo* item)\
  90.     {\
  91.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  92.         METHOD_AVLTREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  93.     }\
  94.     void RemoveAll##NameTo()\
  95.     {\
  96.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  97.         METHOD_AVLTREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  98.     }\
  99.     void DeleteAll##NameTo()\
  100.     {\
  101.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  102.         METHOD_AVLTREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  103.     }\
  104.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  105.     {\
  106.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  107.         METHOD_AVLTREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  108.     }\
  109.     ClassTo* GetFirst##NameTo() const\
  110.     {\
  111.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  112.         METHOD_AVLTREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  113.     }\
  114.     ClassTo* GetLast##NameTo() const\
  115.     {\
  116.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  117.         METHOD_AVLTREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  118.     }\
  119.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  120.     {\
  121.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  122.         METHOD_AVLTREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  123.     }\
  124.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  125.     {\
  126.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  127.         METHOD_AVLTREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  128.     }\
  129.     int Get##NameTo##Count() const\
  130.     {\
  131.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  132.         METHOD_AVLTREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  133.     }\
  134.     ITERATOR_TEMPLATE_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  135.  
  136. #define RELATION_CRITICAL_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  137. private:\
  138.     ClassTo* _top##NameTo;\
  139.     int _count##NameTo;\
  140. \
  141. public:\
  142.     static CriticalSection _criticalSection##NameTo;\
  143.     static CriticalSection& CriticalSection##NameTo() { return _criticalSection##NameTo; }\
  144. \
  145. protected:\
  146. \
  147. public:\
  148.     void Add##NameTo(ClassTo* item);\
  149.     void Remove##NameTo(ClassTo* item);\
  150.     void DeleteAll##NameTo();\
  151.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  152.     ClassTo* GetFirst##NameTo() const;\
  153.     ClassTo* GetLast##NameTo() const;\
  154.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  155.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  156.     int Get##NameTo##Count() const;\
  157.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  158.  
  159. #define RELATION_NOFILTER_CRITICAL_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  160. private:\
  161.     ClassTo* _top##NameTo;\
  162.     int _count##NameTo;\
  163. \
  164. public:\
  165.     static CriticalSection _criticalSection##NameTo;\
  166.     static CriticalSection& CriticalSection##NameTo() { return _criticalSection##NameTo; }\
  167. \
  168. protected:\
  169. \
  170. public:\
  171.     void Add##NameTo(ClassTo* item);\
  172.     void Remove##NameTo(ClassTo* item);\
  173.     void DeleteAll##NameTo();\
  174.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  175.     ClassTo* GetFirst##NameTo() const;\
  176.     ClassTo* GetLast##NameTo() const;\
  177.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  178.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  179.     int Get##NameTo##Count() const;\
  180.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  181.  
  182. #define RELATION_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  183.     RELATION_CRITICAL_AVLTREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  184.  
  185. // defines implementation
  186. #define INIT_CRITICAL_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  187. {\
  188.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  189.     INIT_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  190. }
  191.  
  192. #define EXIT_CRITICAL_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  193. {\
  194.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  195.     EXIT_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  196. }
  197.  
  198. #define REPLACE_CRITICAL_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  199. {\
  200.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  201.     REPLACE_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  202. }
  203.  
  204. #define INIT_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  205. {\
  206.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  207.     INIT_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  208. }
  209.  
  210. #define EXIT_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  211. {\
  212.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  213.     EXIT_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  214. }
  215.  
  216. #define REPLACE_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  217. {\
  218.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  219.     REPLACE_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  220. }
  221.  
  222. #define REMOVE_CRITICAL_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  223. {\
  224.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  225.     REMOVE_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  226. }
  227.  
  228. #define SAVE_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  229. {\
  230.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  231.     SAVE_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  232. }
  233.  
  234. #define RESTORE_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  235. {\
  236.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  237.     RESTORE_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  238. }
  239.  
  240. #define REMOVE_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  241. {\
  242.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  243.     REMOVE_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  244. }
  245.  
  246. #define CLEANUP_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  247. {\
  248.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  249.     CLEANUP_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  250. }
  251.  
  252. #define METHODS_CRITICAL_AVLTREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  253.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  254. void ClassFrom##::Add##NameTo(ClassTo* item)\
  255. {\
  256.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  257.     METHOD_AVLTREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  258. }\
  259. \
  260. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  261. {\
  262.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  263.     METHOD_AVLTREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  264. }\
  265. \
  266. void ClassFrom##::DeleteAll##NameTo()\
  267. {\
  268.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  269.     METHOD_AVLTREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  270. }\
  271. \
  272. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  273. {\
  274.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  275.     METHOD_AVLTREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  276. }\
  277. \
  278. ClassTo* ClassFrom##::GetFirst##NameTo() const\
  279. {\
  280.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  281.     METHOD_AVLTREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  282. }\
  283. \
  284. ClassTo* ClassFrom##::GetLast##NameTo() const\
  285. {\
  286.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  287.     METHOD_AVLTREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  288. }\
  289. \
  290. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos) const\
  291. {\
  292.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  293.     METHOD_AVLTREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  294. }\
  295. \
  296. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos) const\
  297. {\
  298.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  299.     METHOD_AVLTREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  300. }\
  301. \
  302. int ClassFrom##::Get##NameTo##Count() const\
  303. {\
  304.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  305.     METHOD_AVLTREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  306. }
  307.  
  308. #define METHODS_CRITICAL_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  309.  
  310. #endif
  311.